##

ALLIANCE_TOP	= /opt/alliance-5.0

ENV_ASIMUT	= MBK_CATAL_NAME=CATAL_ASIMUT

ENV_COUGAR	= MBK_SPI_MODEL=$(ALLIANCE_TOP)/etc/spimodel.cfg ;\
		  export MBK_SPI_MODEL;\
		  MBK_IN_PH=ap ;\
		  export MBK_IN_PH;\
		  MBK_OUT_LO=spi;\
		  export MBK_OUT_LO
	
all: translate check-behavioral synthesis place-route transistors

#------------------------------------------------------------------------------
# Translate to Alliance VHDL

translate: reg_cu_to_alu.vbe pipeline_cu_to_alu.vst

reg_cu_to_alu.vbe: reg_cu_to_alu.vhdl
	vasy -Vaop -I vhdl reg_cu_to_alu

pipeline_cu_to_alu.vst pipeline_cu_to_alu_model.vbe: pipeline_cu_to_alu.vhdl
	vasy -Vaop -I vhdl -H pipeline_cu_to_alu

#------------------------------------------------------------------------------
# Simulate the pipeline_cu_to_alu model

check-behavioral:  reg_cu_to_alu.vbe pipeline_cu_to_alu.vst \
			test_pipeline_cu_to_alu.pat result_sim.pat

test_pipeline_cu_to_alu.pat: test_pipeline_cu_to_alu.c
	genpat test_pipeline_cu_to_alu

result_sim.pat: pipeline_cu_to_alu.vst test_pipeline_cu_to_alu.pat
	$(ENV_ASIMUT) asimut pipeline_cu_to_alu test_pipeline_cu_to_alu result_sim

view-behav: result_sim.pat
	xpat -l result_sim 

#------------------------------------------------------------------------------
# Synthesize the pipeline_cu_to_alu4 bits

synthesis: reg_cu_to_alu.vst pipeline_cu_to_alu_model.vst

reg_cu_to_alu.vst: reg_cu_to_alu_boom.vbe
	boog -m 0 reg_cu_to_alu_boom reg_cu_to_alu
	loon -m 0 -o reg_cu_to_alu

pipeline_cu_to_alu_model.vst: pipeline_cu_to_alu_model_boom.vbe
	boog -m 0 pipeline_cu_to_alu_model_boom pipeline_cu_to_alu_model
	loon -m 0 -o pipeline_cu_to_alu_model

reg_cu_to_alu_boom.vbe: reg_cu_to_alu.vbe
	boom -i 10 -d 0 reg_cu_to_alu reg_cu_to_alu_boom

pipeline_cu_to_alu_model_boom.vbe: pipeline_cu_to_alu_model.vbe
	boom -i 10 -d 0 pipeline_cu_to_alu_model pipeline_cu_to_alu_model_boom

view-gates: pipeline_cu_to_alu.vst reg_cu_to_alu.vst pipeline_cu_to_alu_model.vst
	xsch -l pipeline_cu_to_alu

#------------------------------------------------------------------------------
# Place and Route the pipeline_cu_to_alu4 bits

place-route: synthesis pipeline_cu_to_alu_ocp.ap pipeline_cu_to_alu_nero.ap \
		pipeline_cu_to_alu_s2r.cif

pipeline_cu_to_alu_ocp.ap: pipeline_cu_to_alu.vst
	ocp pipeline_cu_to_alu pipeline_cu_to_alu_ocp

pipeline_cu_to_alu_nero.ap: pipeline_cu_to_alu_ocp.ap pipeline_cu_to_alu.vst
	nero -p pipeline_cu_to_alu_ocp pipeline_cu_to_alu pipeline_cu_to_alu_nero

pipeline_cu_to_alu_s2r.cif: pipeline_cu_to_alu_nero.ap
	s2r pipeline_cu_to_alu_nero pipeline_cu_to_alu_s2r

view-place: synthesis pipeline_cu_to_alu_ocp.ap
	graal -l pipeline_cu_to_alu_ocp

view-route: synthesis pipeline_cu_to_alu_nero.ap
	graal -l pipeline_cu_to_alu_nero

view-real: synthesis pipeline_cu_to_alu_s2r.cif
	dreal -l pipeline_cu_to_alu_s2r

#------------------------------------------------------------------------------
# Extract transistor netlist

transistors: place-route pipeline_cu_to_alu_transistors.spi reg_cu_to_alu_transistors.spi \
		
pipeline_cu_to_alu_transistors.spi: pipeline_cu_to_alu_nero.ap
	$(ENV_COUGAR); cougar -t pipeline_cu_to_alu_nero pipeline_cu_to_alu_transistors

reg_cu_to_alu_transistors.spi: reg_cu_to_alu_nero.ap
	$(ENV_COUGAR); cougar -t reg_cu_to_alu_nero reg_cu_to_alu_transistors

reg_cu_to_alu_ocp.ap: reg_cu_to_alu.vst
	ocp reg_cu_to_alu reg_cu_to_alu_ocp

reg_cu_to_alu_nero.ap: reg_cu_to_alu_ocp.ap reg_cu_to_alu.vst
	nero -p reg_cu_to_alu_ocp reg_cu_to_alu reg_cu_to_alu_nero
	
spice-pipeline_cu_to_alu: pipeline_cu_to_alu_transistors.spi
	$(ENV_COUGAR); xsch -I spi -l pipeline_cu_to_alu_transistors
	
spice-mux: reg_cu_to_alu_transistors.spi
	$(ENV_COUGAR); xsch -I spi -l reg_cu_to_alu_transistors
	
clean:
	rm -rf  *.pat \
		*.vst \
		*.xsc \
		*.vbe \
		*.boom \
		*.ap \
		*.cif \
		*.spi \
		*.dat
